﻿using System;
using System.Windows.Forms;
using System.Globalization;

namespace L_calc
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            textBox_c1.Text = Properties.Settings.Default.C1.ToString();
            textBox_c2.Text = Properties.Settings.Default.C2.ToString();
            //
            textBox_f1.Text = "";
            textBox_f2.Text = "";
            //
            textBox_cx.Text = "";
            textBox_l.Text = "";
            //
            string c1 = "Pojemność pierwszego kondensatora wzorcowego";
            toolTip1.SetToolTip(label1, c1); toolTip1.SetToolTip(textBox_c1, c1); toolTip1.SetToolTip(label7, c1);
            //
            string c2 = "Pojemność drugiego kondensatora wzorcowego";
            toolTip1.SetToolTip(label2, c2); toolTip1.SetToolTip(textBox_c2, c2); toolTip1.SetToolTip(label8, c2);
            //
            string f1 = "Pierwsza częstotliwość, przy C1";
            toolTip1.SetToolTip(label3, f1); toolTip1.SetToolTip(textBox_f1, f1); toolTip1.SetToolTip(label9, f1);
            //
            string f2 = "Druga częstotliwość, przy C1+C2";
            toolTip1.SetToolTip(label4, f2); toolTip1.SetToolTip(textBox_f2, f2); toolTip1.SetToolTip(label10, f2);
            //
            string cx = "Pojemność kondensatora pasożytniczego";
            toolTip1.SetToolTip(label5, cx); toolTip1.SetToolTip(textBox_cx, cx); toolTip1.SetToolTip(label11, cx);
            //
            string l = "Indukcyjność mierzonej cewki";
            toolTip1.SetToolTip(label6, l); toolTip1.SetToolTip(textBox_l, l); toolTip1.SetToolTip(label12, l);
            //
            toolTip1.SetToolTip(checkBox1, "Wyliczoną indukcyjność wpisać do schowka");
            //
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            cleanNumbers();
            //
            if (isNumberOk(textBox_c1.Text)) Properties.Settings.Default.C1 = Double.Parse(textBox_c1.Text, CultureInfo.InvariantCulture);
            if (isNumberOk(textBox_c2.Text)) Properties.Settings.Default.C2 = Double.Parse(textBox_c2.Text, CultureInfo.InvariantCulture);
            //
            Properties.Settings.Default.Save();
        }

        private void button_do_Click(object sender, EventArgs e)
        {
            cleanNumbers();
            //
            bool isError = false;
            errorProvider1.Clear();
            string en = "Błędna liczba";
            if (!isNumberOk(textBox_c1.Text)) { errorProvider1.SetError(textBox_c1, en); isError = true; }
            if (!isNumberOk(textBox_c2.Text)) { errorProvider1.SetError(textBox_c2, en); isError = true; }
            //
            if (!isNumberOk(textBox_f1.Text)) { errorProvider1.SetError(textBox_f1, en); isError = true; }
            if (!isNumberOk(textBox_f2.Text)) { errorProvider1.SetError(textBox_f2, en); isError = true; }
            //
            textBox_cx.Text = "";
            textBox_l.Text = "";
            //
            if (isError) return;
            //
            try
            {
                double c1 = double.Parse(textBox_c1.Text, CultureInfo.InvariantCulture) * 0.000000001;//nF
                double c2 = double.Parse(textBox_c2.Text, CultureInfo.InvariantCulture) * 0.000000001;//nF
                c2 = c1 + c2;
                double f1 = double.Parse(textBox_f1.Text, CultureInfo.InvariantCulture) * 1000;//kHz
                double f2 = double.Parse(textBox_f2.Text, CultureInfo.InvariantCulture) * 1000;
                //
                double cx = (c1 * Math.Pow(f1, 2) - c2 * Math.Pow(f2, 2)) / (Math.Pow(f2, 2) - Math.Pow(f1, 2));
                double l = 1.0 / ((c1 + cx) * Math.Pow(2 * Math.PI * f1, 2));
                //
                if (Double.IsNaN(cx) || Double.IsNaN(l) || Double.IsInfinity(l))
                {
                    errorProvider1.SetError(button_do, "Błąd w danych wejściowych");
                    return;
                }
                //
                string s = string.Format("Cx={0:0.###E+0} L={1:0.###E+0}", cx, l);
                double cx_nF = Math.Round(cx * 1000000000.0, 2);
                double l_uH = Math.Round(l * 1000000.0, 2);
                //
                textBox_cx.Text = cx_nF.ToString();
                textBox_l.Text = l_uH.ToString();
                //
                if (checkBox1.Checked)
                {
                    Clipboard.SetText(textBox_l.Text, TextDataFormat.UnicodeText);
                }
                //
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            //
            textBox_f1.Focus();
            //
        }

        private bool isNumberOk(string s)
        {
            double d;
            return Double.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out d);
        }
        private void cleanNumbers()
        {
            textBox_c1.Text = textBox_c1.Text.Replace(',', '.').Trim();
            textBox_c2.Text = textBox_c2.Text.Replace(',', '.').Trim();
            textBox_f1.Text = textBox_f1.Text.Replace(',', '.').Trim();
            textBox_f2.Text = textBox_f2.Text.Replace(',', '.').Trim();
        }

        private void textBox_f1_Enter(object sender, EventArgs e)
        {
            textBox_f1.SelectAll();
        }

        private void textBox_f2_Enter(object sender, EventArgs e)
        {
            textBox_f2.SelectAll();
        }

        private void textBox_f1_Click(object sender, EventArgs e)
        {
            textBox_f1.SelectAll();
        }

        private void textBox_f2_Click(object sender, EventArgs e)
        {
            textBox_f2.SelectAll();
        }
    }
}
